package com.wzh.common.cloud.annotation;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

import java.lang.annotation.*;

/**
 * WZH Cloud 微服务启用注解（包含数据库支持）
 * 组合了微服务和数据库相关的注解，适用于需要数据库操作的服务
 * 包含的功能：
 * - @SpringBootApplication: Spring Boot 应用启动
 * - @EnableDiscoveryClient: 启用服务发现
 * - @EnableFeignClients: 启用 Feign 客户端
 * - @EnableAspectJAutoProxy: 启用 AOP 切面
 * - @ComponentScan: 组件扫描
 * - @MapperScan: MyBatis Mapper 扫描
 * - @EnableTransactionManagement: 启用事务管理
 *
 * @author wzh
 * @since 1.0.0
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@EnableDiscoveryClient
@EnableAspectJAutoProxy
@ComponentScan(basePackages = {"com.wzh.common"})
@EnableFeignClients(basePackages = {
        "com.wzh.**.api.feign"
})
public @interface EnableWzhCloudWithDatabase {

    /**
     * 额外的组件扫描包路径
     * 默认已包含 "com.wzh.common"，可以通过此属性添加额外的扫描路径
     */
    String[] extraScanPackages() default {};

    /**
     * 是否启用 Feign 客户端
     * 默认启用，某些服务如果不需要调用其他服务可以设置为 false
     */
    boolean enableFeign() default true;

    /**
     * Feign 客户端扫描包路径
     * 默认扫描 "com.wzh"，可以通过此属性自定义
     */
    String[] feignPackages() default {
            "com.wzh.**.api.client",
            "com.wzh.common.feign"
    };

    /**
     * MyBatis Mapper 扫描包路径
     * 默认扫描 "com.wzh.**.mapper"，可以通过此属性自定义
     */
    String[] mapperPackages() default {"com.wzh.**.mapper"};

    /**
     * 是否启用事务管理
     * 默认启用
     */
    boolean enableTransaction() default true;
}